package study.top.mydb;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import org.apache.log4j.Logger;

import study.top.common.DBHandler;
import study.top.common.DateTime;
import study.top.common.TopCommon;
import study.top.jsp.MultipartBox.FileInfo;
import study.top.mydb.items.BoardItem;
import study.top.mydb.items.Category1Item;
import study.top.mydb.items.NboardItem;

/**
 * 
 * @author SEUNG-Won��
 * 
 */

public class Nboard {

	static Logger logger = Logger.getLogger(Nboard.class);	
	// �����ͺ��̽� ���� ��ü�� ���� ����
		DBHandler db = null;
			
		public Nboard() {
			// DB��ü�� ���� ���� ����
			db = DBHandler.getInstance();
		}
	private static final String TABLE = "n_board";

	
	
	/**
	 * �ذ������� ����ϴ� �޼���
	 * 
	 * @param title
	 *            �������� ����
	 * @param content
	 *            �������� ����
	 * @param hit
	 *            �������� ��ȸ��
	 * @param imgurl
	 *            �������� �̹����ּ�
	 * @param member_seq
	 *            �������� �ۼ�ȸ�� �Ϸù�ȣ
	 * @return ��� ����
	 */
	public int insertNboard(String title, String content,
	         int member_seq) {

	      logger.debug("=========method start >> insertNboard");
	      logger.debug("[PARAMS] title = " + title);
	      logger.debug("[PARAMS] content = " + content);
	      logger.debug("[PARAMS] member_seq = " + member_seq);

	      // ������ �� ����
	      int seq = -1;
	      int hit=1;

	      // SQL ������ ���
	      title = title.replace("'", "\'");
	      content = content.replace("'", "\'");

	      // reg_date, edit_date�� ���ؼ� ����
	      String date = DateTime.getInstance().getNowDateTimeString();
	      // Ʈ������
	      db.beginTrans();
	     
	      seq = db.getMax(TABLE, "seq", null) + 1;

	      logger.debug("생성된 seq: " + seq);
	      db.beginTrans();
	      // INSERT ó���� ���� ����
	      String sql = "INSERT INTO n_board(seq,title,content,hit,member_seq,reg_date,edit_date)"
	            + " VALUES(%d,'%s','%s',%d,%d,'%s','%s');";
	      
	      boolean result = db.execSql(sql, seq, title, content,hit, member_seq,
	            date, date);

	      // -----------------------------------------
	      // ���ó��
	      // -----------------------------------------
	      if (result) {
	         
	         db.commit();
	         logger.debug("등록성공 >> " + seq + "번 등록성공");
	      } else {
	         db.rollback();
	         logger.error("등록실패>>등록실패");
	      }

	      logger.debug("=============== method end >> insertNboard");

	      return seq;
	   }
	
	
	/**
	 * �ذ������� �����ϴ� �޼���
	 * 
	 * @param title
	 *            �������� ����
	 * @param content
	 *            �������� ����
	 * @param hit
	 *            �������� ��ȸ��
	 * @param imgurl
	 *            �������� �̹����ּ�
	 * @param member_seq
	 *            �������� �ۼ�ȸ�� �Ϸù�ȣ
	 * @return �������� ���� ����
	 */
	public boolean updateNboard(int seq, String title, String content, int hit,
			String imgurl, int member_seq) {

		logger.debug("=========method start >> updateNboard");
		logger.debug("[PARAMS] title = " + title);
		logger.debug("[PARAMS] content = " + content);
		logger.debug("[PARAMS] hit = " + hit);
		logger.debug("[PARAMS] imgurl = " + imgurl);
		logger.debug("[PARAMS] member_seq = " + member_seq);

		// SQL인젝션방어
		title = title.replace("'", "\'");
		content = content.replace("'", "\'");
		
		boolean result = false;

	
		
		db.beginTrans();

		
		String sql = "UPDATE n_board SET title = '%s', content = '%s', member_seq = %d WHERE seq = %d;";

		
		 String date = DateTime.getInstance().getNowDateTimeString();

		result = db.execSql(sql, title, content,member_seq, seq);

		
		if (result) {
			db.commit();
			logger.debug("처리결과>> " + seq + "번 공지사항 수정");
		} else {
			db.rollback();
			logger.error("처리결과>> >> 수정 실패 ");
		}

		logger.debug("=============== method end >> updateNboard");

		return result;
	}
	
	
	
	
	
	
	
	
	/**
	 * �ذ������� �����ϴ� �޼���
	 * 
	 * @param seq
	 *            ������ �������� �Ϸù�ȣ
	 * @return ���� ����
	 */
	public boolean deleteNboard(int seq) {
		logger.debug("=========method start >> deleteNboard");
		logger.debug("[PARAMS] seq = " + seq);

		boolean result = false;

		// �� �����͸� �����ϴ� �ٸ� �����͵��� ���� ���� �˻�
		if (db.getCount("Nboard", "seq", "seq=" + seq) > 0) {

			logger.error("���� ���Ἲ ����");
			return result;
		}

		// Ʈ������
		db.beginTrans();

		// DELETE ó���� ���� ����
		String sql = "DELETE FROM n_board WHERE seq = %d";
		result = db.execSql(sql, seq);

		// -----------------------------------------
		// ���ó��
		// -----------------------------------------
		if (result) {
			db.commit();
			logger.debug("ó����� >> " + seq + "�� �������� ��������");
		} else {
			db.rollback();
			logger.error("ó����� >> �������� ���� ���� ");
		}

		logger.debug("=============== method end >> deleteNboard");

		return result;
	}
	
	
	

	/**
	 * �ذ������� ���� ����
	 * 
	 * @param seq
	 *            �������� �Ϸù�ȣ
	 * @return NboardItem ����
	 */
	public NboardItem selectNboard(int seq) {

		logger.debug("=========method start >> selectNboard");

		logger.debug("[PARAMS] seq = " + seq);
		NboardItem item = null;

		
		

		// ������ ��ȸ
		String sql = "SELECT seq, title, content, hit, imgurl, member_seq, reg_date, edit_date FROM n_board WHERE seq = %d";
		ResultSet rs = db.getResult(sql, seq);

		if (rs != null) {
			// ������ ��ȸ ��� �ִ� ���
			try {
				rs.next();

				// 1) ResultSet�� ��� �����͸� ������ ����
				int n_seq = rs.getInt(1);
				String title = rs.getString(2);
				String content = rs.getString(3);
				int hit = rs.getInt(4);
				String imgurl = rs.getString(5);
				int member_seq = rs.getInt(6);
				String reg_date = rs.getString(7);
				String edit_date = rs.getString(8);

				// 2) ����� ���� ��ü�� ����
				item = new NboardItem(n_seq, title, content, hit, imgurl, member_seq, reg_date, edit_date);

			} catch (SQLException e) {
				logger.error(e);
			} finally {
				// 3) ������ ��ȸ�� ���� �޸� �ݳ�
				try {
					rs.close();
				} catch (SQLException e) {
				}
				rs = null;
			}
		}

		if (item == null) {
			logger.error("������ ��ȸ ����");
		} else {
			logger.debug("������ ��ȸ ����");
			logger.debug(item.toString());
		}

		logger.debug("=============== method end >> selectNboard");

		return item;

	}

	
	
	
	/**
	 * �������� ��ü���� �޼���
	 * 
	 * @return			NboardItem ����
	 */
	public ArrayList<NboardItem> selectNboardList() {

		logger.debug("=========method start >> selectNboardList");

		ArrayList<NboardItem> list = null;

		// ������ ��ȸ
		String sql = "SELECT seq,  title, content, hit, imgurl, member_seq ,reg_date,edit_date FROM n_board";

		ResultSet rs = db.getResult(sql);

		if (rs != null) {
			// ������ ��ȸ ��� �ִ� ���
			try {
				list = new ArrayList<NboardItem>();

				while (rs.next()) {

					// 1) ResultSet�� ��� �����͸� ������ ����
					int seq = rs.getInt(1);
					String title = rs.getString(2);
					String content = rs.getString(3);
					int hit = rs.getInt(4);
					String imgurl = rs.getString(5);
					int member_seq = rs.getInt(6);
					String reg_date = rs.getString(7);
					String edit_date = rs.getString(8);

					// 2) ����� ���� ��ü�� ����
					NboardItem item = new NboardItem(seq, title, content, hit,
							imgurl, member_seq, reg_date, edit_date);

					// 3) ArrayList�� �߰�
					list.add(item);
				}
			} catch (SQLException e) {
				logger.error(e);
			} finally {
				// 4) ������ ��ȸ�� ���� �޸� �ݳ�
				try {
					rs.close();
				} catch (SQLException e) {
				}
				rs = null;
			}
		}

		if (list == null) {
			logger.error("������ ��ȸ ����");
		} else {
			logger.debug("������ ��ȸ ���� >> " + list.size() + "�� ��ȸ��");
		}

		logger.debug("=============== method end >> selectNboardList");

		return list;
	}

}